Low-Rank Adaptation explained